from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

# mysql+pymysql://<username>:<password>@<host>:<port>/<database>
SQLALCHEMY_DATABASE_URL = "mysql+pymysql://root@localhost:3306/stock_db"

engine = create_engine(SQLALCHEMY_DATABASE_URL)

"""
autocommit 自动提交事务，如果设置为 True，每次执行完 SQL 操作后就会立即提交
autoflush 自动刷新会话，如果设置为 True，在你执行查询前，SQLAlchemy 会自动 flush 当前 session 中的所有挂起操作
"""
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base = declarative_base()  # ORM 基类


def get_db():
    """
    用于 FastAPI 依赖注入，每个请求获取一个独立会话，请求结束后自动关闭。
    """
    db = SessionLocal()
    try:
        yield db  # 提供会话给路由函数
    finally:
        db.close()  # 确保会话关闭
